package com.gxc.array;

import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;
import java.util.Scanner;

/**
 * 一个荒岛上有若干人，岛上只有一条路通往岛屿两端的港口，大家需要逃往两端的港口才可逃生。
 *
 * 假定每个人移动的速度一样，且只可选择向左或向右逃生。
 *
 * 若两个人相遇，则进行决斗，战斗力强的能够活下来，并损失掉与对方相同的战斗力；若战斗力相同，则两人同归于尽。
 *
 * 输入描述
 * 给定一行非 0 整数数组，元素个数不超过30000；
 *
 * 正负表示逃生方向（正表示向右逃生，负表示向左逃生），绝对值表示战斗力，越左边的数字表示里左边港口越近，逃生方向相同的人永远不会发生决斗。
 *
 * 输出描述
 * 能够逃生的人总数，没有人逃生输出0，输入异常时输出-1。
 */
public class MaxEscape {

    public static void main(String[] args) {
        Scanner scanner = new Scanner(System.in);
        int[] array = Arrays.stream(scanner.nextLine().split(" ")).mapToInt(Integer::parseInt).toArray();
        scanner.close();;

        List<Integer> people = new ArrayList<>();
        for (int i = 0; i < array.length; i++) {
            if (array[i] == 0) {
                System.out.println(-1);
                return;
            }
            people.add(array[i]);
        }

        if (people.size() > 30000) {
            System.out.println(-1);
        } else {
            System.out.println(asteroidCollision(people));
        }
    }

    private static int asteroidCollision(List<Integer> people) {
        List<Integer> survivors = new ArrayList<>();

        for (Integer person : people) {
            boolean alive = true;
            while (alive && !survivors.isEmpty() && survivors.get(survivors.size() -1) > 0 && person < 0) {
                alive = survivors.get(survivors.size()-1) + person < 0;
                // 如果survivors列表中最后一个元素小于等于person的相反数，则移除该元素
                if (survivors.get(survivors.size()-1) + person<=0) {
                    person = survivors.get(survivors.size()-1) + person;
                    survivors.remove(survivors.size()-1);
                }
            }

            if (alive) {
                survivors.add(person);
            }
        }
        return survivors.size();
    }
}
